<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>启动新会话或者重用现有会话</title>
<link media="all" rel="stylesheet" type="text/css" href="styles/03e73060321a0a848018724a6c83de7f-theme-base.css" />
<link media="all" rel="stylesheet" type="text/css" href="styles/03e73060321a0a848018724a6c83de7f-theme-medium.css" />

 </head>
 <body class="docs"><div class="navbar navbar-fixed-top">
  <div class="navbar-inner clearfix">
    <ul class="nav" style="width: 100%">
      <li style="float: left;"><a href="function.session-set-save-handler.html">« session_set_save_handler</a></li>
      <li style="float: right;"><a href="function.session-status.html">session_status »</a></li>
    </ul>
  </div>
</div>
<div id="breadcrumbs" class="clearfix">
  <ul class="breadcrumbs-container">
    <li><a href="index.html">PHP Manual</a></li>
    <li><a href="ref.session.html">Session 函数</a></li>
    <li>启动新会话或者重用现有会话</li>
  </ul>
</div>
<div id="layout">
  <div id="layout-content"><div id="function.session-start" class="refentry">
 <div class="refnamediv">
  <h1 class="refname">session_start</h1>
  <p class="verinfo">(PHP 4, PHP 5, PHP 7, PHP 8)</p><p class="refpurpose"><span class="refname">session_start</span> &mdash; <span class="dc-title">启动新会话或者重用现有会话</span></p>

 </div>

 <div class="refsect1 description" id="refsect1-function.session-start-description">
  <h3 class="title">说明</h3>
  <div class="methodsynopsis dc-description">
   <span class="methodname"><strong>session_start</strong></span>(<span class="methodparam"><span class="type">array</span> <code class="parameter">$options</code><span class="initializer"> = array()</span></span>): <span class="type">bool</span></div>

  <p class="para rdfs-comment">
   <span class="function"><strong>session_start()</strong></span> 会创建新会话或者重用现有会话。
   如果通过 GET 或者 POST 方式，或者使用 cookie 提交了会话 ID，
   则会重用现有会话。
  </p>
  <p class="para">
   当会话自动开始或者通过 <span class="function"><strong>session_start()</strong></span> 手动开始的时候，
   PHP 内部会调用会话管理器的 open 和 read 回调函数。
   会话管理器可能是 PHP 默认的，
   也可能是扩展提供的（SQLite 或者 Memcached 扩展），
   也可能是通过 <span class="function"><a href="function.session-set-save-handler.html" class="function">session_set_save_handler()</a></span> 设定的用户自定义会话管理器。
   通过 read 回调函数返回的现有会话数据（使用特殊的序列化格式存储），
   PHP 会自动反序列化数据并且填充 $_SESSION 超级全局变量。
  </p>
  <p class="para">
   要想使用命名会话，请在调用 <span class="function"><strong>session_start()</strong></span> 函数
   之前调用 <span class="function"><a href="function.session-name.html" class="function">session_name()</a></span> 函数。
  </p>
  <p class="para">
   如果启用了 <a href="session.configuration.html#ini.session.use-trans-sid" class="link">session.use_trans_sid</a> 选项，
   <span class="function"><strong>session_start()</strong></span> 函数会注册一个内部输出管理器，
   该输出管理器完成 URL 重写的工作。
  </p>
  <p class="para">
   如果用户联合使用 <span class="function"><a href="function.ob-start.html" class="function">ob_start()</a></span> 
   和 <code class="literal">ob_gzhandler</code> 函数，
   那么函数的调用顺序会影响输出结果。
   例如，必须在开始会话之前调用 <code class="literal">ob_gzhandler</code> 函数完成注册。
  </p>
 </div>

 
 <div class="refsect1 parameters" id="refsect1-function.session-start-parameters">
  <h3 class="title">参数</h3>
  <dl>
   
    <dt>
<code class="parameter">options</code></dt>

    <dd>

     <p class="para">
      此参数是一个关联数组，如果提供，那么会用其中的项目覆盖 <a href="session.configuration.html" class="link">会话配置指示</a> 中的配置项。此数组中的键无需包含 <code class="literal">session.</code> 前缀。
     </p>
     <p class="para">
      除了常规的会话配置指示项，
      还可以在此数组中包含 <code class="literal">read_and_close</code>
      选项。如果将此选项的值设置为 <strong><code>true</code></strong>，
      那么会话文件会在读取完毕之后马上关闭，
      因此，可以在会话数据没有变动的时候，避免不必要的文件锁。
     </p>
    </dd>

   
  </dl>

 </div>

 
 <div class="refsect1 returnvalues" id="refsect1-function.session-start-returnvalues">
  <h3 class="title">返回值</h3>
  <p class="para">
   成功开始会话返回 <strong><code>true</code></strong> ，反之返回 <strong><code>false</code></strong>
  </p>
 </div>


 <div class="refsect1 changelog" id="refsect1-function.session-start-changelog">
  <h3 class="title">更新日志</h3>
  <p class="para">
   <table class="doctable informaltable">
    
     <thead>
      <tr>
       <th>版本</th>
       <th>说明</th>
      </tr>

     </thead>

     <tbody class="tbody">
      <tr>
       <td>7.1.0</td>
       <td>
        当 <span class="function"><strong>session_start()</strong></span> 执行失败，
        无法开始一个会话的时候，会返回 <strong><code>false</code></strong>，
        并且不会初始化超级变量 <var class="varname"><a href="reserved.variables.session.html" class="classname">$_SESSION</a></var>。
       </td>
      </tr>

      <tr>
       <td>7.0.0</td>
       <td>
        新加 <code class="parameter">options</code> 参数。
       </td>
      </tr>

      <tr>
       <td>5.3.0</td>
       <td>
        如果函数调用失败返回 <strong><code>false</code></strong>，
        之前版本返回了 <strong><code>true</code></strong>。
       </td>
      </tr>

     </tbody>
    
   </table>

  </p>
 </div>


 <div class="refsect1 examples" id="refsect1-function.session-start-examples">
  <h3 class="title">范例</h3>
  <div class="refsect2 unknown-examplet" id="refsect2-function.session-start-unknown-examplet">
  <h4 class="title">基本的会话示例</h4>
  <p class="para">
   <div class="example" id="example-4709">
    <p><strong>示例 #1 <var class="filename">page1.php</var></strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">//&nbsp;page1.php<br /><br /></span><span style="color: #0000BB">session_start</span><span style="color: #007700">();<br /><br />echo&nbsp;</span><span style="color: #DD0000">'Welcome&nbsp;to&nbsp;page&nbsp;#1'</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'favcolor'</span><span style="color: #007700">]&nbsp;=&nbsp;</span><span style="color: #DD0000">'green'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'animal'</span><span style="color: #007700">]&nbsp;&nbsp;&nbsp;=&nbsp;</span><span style="color: #DD0000">'cat'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'time'</span><span style="color: #007700">]&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=&nbsp;</span><span style="color: #0000BB">time</span><span style="color: #007700">();<br /><br /></span><span style="color: #FF8000">//&nbsp;如果使用&nbsp;cookie&nbsp;方式传送会话&nbsp;ID<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'&lt;br&nbsp;/&gt;&lt;a&nbsp;href="page2.php"&gt;page&nbsp;2&lt;/a&gt;'</span><span style="color: #007700">;<br /><br /></span><span style="color: #FF8000">//&nbsp;如果不是使用&nbsp;cookie&nbsp;方式传送会话&nbsp;ID，则使用&nbsp;URL&nbsp;改写的方式传送会话&nbsp;ID<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'&lt;br&nbsp;/&gt;&lt;a&nbsp;href="page2.php?'&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #0000BB">SID&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #DD0000">'"&gt;page&nbsp;2&lt;/a&gt;'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
    </div>

   </div>
  </p>
  <p class="para">
   请求 <var class="filename">page1.php</var> 页面之后，
   第二个页面 <var class="filename">page2.php</var> 
   会包含会话数据。
   请查阅 <a href="ref.session.html" class="link">会话参考</a>
   获取更多关于 <a href="session.idpassing.html" class="link">会话 ID 传送</a>的信息，
   在该参考页面中有关于常量 <strong><code>SID</code></strong> 的详细说明。
  </p>
  <p class="para">
   <div class="example" id="example-4710">
    <p><strong>示例 #2 <var class="filename">page2.php</var></strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">//&nbsp;page2.php<br /><br /></span><span style="color: #0000BB">session_start</span><span style="color: #007700">();<br /><br />echo&nbsp;</span><span style="color: #DD0000">'Welcome&nbsp;to&nbsp;page&nbsp;#2&lt;br&nbsp;/&gt;'</span><span style="color: #007700">;<br /><br />echo&nbsp;</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'favcolor'</span><span style="color: #007700">];&nbsp;</span><span style="color: #FF8000">//&nbsp;green<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'animal'</span><span style="color: #007700">];&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;cat<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #0000BB">date</span><span style="color: #007700">(</span><span style="color: #DD0000">'Y&nbsp;m&nbsp;d&nbsp;H:i:s'</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'time'</span><span style="color: #007700">]);<br /><br /></span><span style="color: #FF8000">//&nbsp;类似&nbsp;page1.php&nbsp;中的代码，你可能需要在这里处理使用&nbsp;SID&nbsp;的场景<br /></span><span style="color: #007700">echo&nbsp;</span><span style="color: #DD0000">'&lt;br&nbsp;/&gt;&lt;a&nbsp;href="page1.php"&gt;page&nbsp;1&lt;/a&gt;'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
    </div>

   </div>
  </p>
 </div>

 <div class="refsect2 unknown-unknown-exampleu" id="refsect2-function.session-start-unknown-unknown-exampleu">
   <h4 class="title">调用 <span class="function"><strong>session_start()</strong></span> 的时候指定选项</h4>

   <div class="example" id="example-4711">
    <p><strong>示例 #3 覆盖 Cookie 超时时间设定</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">//&nbsp;设置&nbsp;cookie&nbsp;的有效时间为&nbsp;1&nbsp;天<br /></span><span style="color: #0000BB">session_start</span><span style="color: #007700">([<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'cookie_lifetime'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">86400</span><span style="color: #007700">,<br />]);<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
    </div>

   </div>

   <div class="example" id="example-4712">
    <p><strong>示例 #4 读取会话之后立即关闭会话存储文件</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #FF8000">//&nbsp;如果确定不修改会话中的数据，<br />//&nbsp;我们可以在会话文件读取完毕之后立即关闭它<br />//&nbsp;来避免由于给会话文件加锁导致其他页面阻塞<br /></span><span style="color: #0000BB">session_start</span><span style="color: #007700">([<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'cookie_lifetime'&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">86400</span><span style="color: #007700">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span><span style="color: #DD0000">'read_and_close'&nbsp;&nbsp;</span><span style="color: #007700">=&gt;&nbsp;</span><span style="color: #0000BB">true</span><span style="color: #007700">,<br />]);</span>
</span>
</code></div>
    </div>

   </div>
  </div>

  
 </div>


 <div class="refsect1 notes" id="refsect1-function.session-start-notes">
  <h3 class="title">注释</h3>
  <blockquote class="note"><p><strong class="note">注意</strong>: 
   <p class="para">
    要使用基于 cookie 的会话，
    必须在输出开始之前调用 <span class="function"><strong>session_start()</strong></span> 函数。
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">注意</strong>: 
   <p class="para">
    建议使用 <a href="zlib.configuration.html#ini.zlib.output-compression" class="link">zlib.output_compression</a>
    来替代 <span class="function"><a href="function.ob-gzhandler.html" class="function">ob_gzhandler()</a></span>。
   </p>
  </p></blockquote>
  <blockquote class="note"><p><strong class="note">注意</strong>: 
   <p class="para">
    根据配置不同，本函数会发送几个 HTTP 响应头。
    参考 <span class="function"><a href="function.session-cache-limiter.html" class="function">session_cache_limiter()</a></span>
    来自定义 HTTP 响应头。
   </p>
  </p></blockquote>
 </div>


 <div class="refsect1 seealso" id="refsect1-function.session-start-seealso">
  <h3 class="title">参见</h3>
  <p class="para">
   <ul class="simplelist">
    <li class="member"><var class="varname"><a href="reserved.variables.session.html" class="classname">$_SESSION</a></var></li>
    <li class="member">
     <a href="session.configuration.html#ini.session.auto-start" class="link">session.auto_start</a>
     配置指示
    </li>
    <li class="member"><span class="function"><a href="function.session-id.html" class="function" rel="rdfs-seeAlso">session_id()</a> - 获取/设置当前会话 ID</span></li>
   </ul>
  </p>
 </div>


</div></div></div></body></html>